const mysql = require('mysql2/promise');

const dbConfig = {
    host: '43.143.253.188',
    port: 3306,
    user: 'nextjs',
    password: 'yEAiRE2jcxTyRBy5',
    database: 'nextjs'
};

async function createSystemMessagesTable() {
    let connection;

    try {
        console.log('🔌 连接到数据库...');
        connection = await mysql.createConnection(dbConfig);
        console.log('✅ 数据库连接成功');

        // 创建系统消息表
        const createTableSQL = `
      CREATE TABLE IF NOT EXISTS \`system_messages\` (
        \`id\` bigint NOT NULL AUTO_INCREMENT COMMENT '消息ID',
        \`messageType\` tinyint NOT NULL COMMENT '消息类型：1-大小开奖，2-赤壁开奖，3-系统公告，4-游戏通知',
        \`actId\` int NOT NULL COMMENT '指令ID，对应WebSocket消息的act_id字段',
        \`code\` int NOT NULL DEFAULT '0' COMMENT '状态码，0-成功，其他-错误码',
        \`content\` varchar(500) NOT NULL COMMENT '消息内容，对应WebSocket消息的data.c字段',
        \`senderName\` varchar(100) NOT NULL DEFAULT '系统' COMMENT '发送者名称，对应WebSocket消息的data.n字段',
        \`receiverId\` int NOT NULL DEFAULT '0' COMMENT '接收者ID，0表示广播给所有用户',
        \`messageTime\` varchar(50) NOT NULL COMMENT '消息时间，对应WebSocket消息的data.h字段',
        \`messageId\` bigint NOT NULL COMMENT '消息唯一标识，对应WebSocket消息的data.id字段',
        \`senderId\` int NOT NULL DEFAULT '0' COMMENT '发送者ID，对应WebSocket消息的data.rid字段',
        \`typeFlag\` tinyint NOT NULL DEFAULT '6' COMMENT '消息类型标识，对应WebSocket消息的data.t字段',
        \`fullMessageData\` json DEFAULT NULL COMMENT '完整的消息数据，用于存储原始WebSocket消息',
        \`relatedGameInfo\` varchar(100) DEFAULT NULL COMMENT '关联的游戏期数ID或相关信息',
        \`status\` tinyint NOT NULL DEFAULT '1' COMMENT '消息状态：0-未发送，1-已发送，2-发送失败',
        \`sendAttempts\` int NOT NULL DEFAULT '0' COMMENT '发送尝试次数',
        \`failureReason\` varchar(200) DEFAULT NULL COMMENT '发送失败原因',
        \`sentAt\` datetime DEFAULT NULL COMMENT '发送时间',
        \`createdAt\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
        \`updatedAt\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
        PRIMARY KEY (\`id\`),
        KEY \`idx_message_type_created\` (\`messageType\`, \`createdAt\`),
        KEY \`idx_act_id_created\` (\`actId\`, \`createdAt\`),
        KEY \`idx_status_created\` (\`status\`, \`createdAt\`),
        KEY \`idx_related_game_info\` (\`relatedGameInfo\`),
        KEY \`idx_created_at\` (\`createdAt\`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统消息表'
    `;

        console.log('📋 创建系统消息表...');
        await connection.execute(createTableSQL);
        console.log('✅ 系统消息表创建成功');

        // 插入示例数据
        const insertSampleDataSQL = `
      INSERT INTO \`system_messages\` (
        \`messageType\`, \`actId\`, \`code\`, \`content\`, \`senderName\`, \`receiverId\`, 
        \`messageTime\`, \`messageId\`, \`senderId\`, \`typeFlag\`, \`relatedGameInfo\`, 
        \`status\`, \`sendAttempts\`, \`sentAt\`
      ) VALUES 
      (
        1, 260, 0, '本次游乐场乾坤八卦开1,2,3大双,共奖出1000金500银两!', '系统', 0,
        '15:30', 1703123456789, 1000, 6, '大小开奖期数: 1001',
        1, 0, NOW()
      ),
      (
        2, 260, 0, '三国鸭胜负已分,获胜国给支持者发放战利品2000金1000银', '系统', 0,
        '15:35', 1703123456790, 1000, 6, '赤壁开奖期数: 2001',
        1, 0, NOW()
      )
    `;

        console.log('📝 插入示例数据...');
        await connection.execute(insertSampleDataSQL);
        console.log('✅ 示例数据插入成功');

        // 验证表结构
        console.log('🔍 验证表结构...');
        const [rows] = await connection.execute('DESCRIBE system_messages');
        console.log('📊 表结构:');
        rows.forEach(row => {
            console.log(`  ${row.Field}: ${row.Type} ${row.Null === 'YES' ? 'NULL' : 'NOT NULL'} ${row.Default ? `DEFAULT ${row.Default}` : ''}`);
        });

        // 验证数据
        console.log('🔍 验证数据...');
        const [dataRows] = await connection.execute('SELECT * FROM system_messages LIMIT 5');
        console.log('📊 数据记录数:', dataRows.length);
        dataRows.forEach((row, index) => {
            console.log(`  记录${index + 1}: ID=${row.id}, 类型=${row.messageType}, 内容=${row.content.substring(0, 30)}...`);
        });

        console.log('\n🎉 系统消息表创建和初始化完成！');

    } catch (error) {
        console.error('❌ 创建表失败:', error.message);
        throw error;
    } finally {
        if (connection) {
            await connection.end();
            console.log('🔌 数据库连接已关闭');
        }
    }
}

// 运行脚本
if (require.main === module) {
    createSystemMessagesTable()
        .then(() => {
            console.log('✅ 脚本执行完成');
            process.exit(0);
        })
        .catch((error) => {
            console.error('❌ 脚本执行失败:', error);
            process.exit(1);
        });
}

module.exports = { createSystemMessagesTable };
